iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 16
0
自我挑戰組

用LeetCode來訓練大腦的邏輯思維系列 第 23

LeetCode 290. Word Pattern

  • 分享至 

  • xImage
  •  

題目

Given a pattern and a string s, find if s follows the same pattern.

Here follow means a full match, such that there is a bijection between a letter in pattern and a non-empty word in s.

題意

給定一個模式和字串,判斷字串是否有遵循相同的模式。

Example 1:

Input: pattern = "abba", s = "dog cat cat dog"
Output: true

Example 2:

Input: pattern = "abba", s = "dog cat cat fish"
Output: false

Example 3:

Input: pattern = "aaaa", s = "dog cat cat dog"
Output: false

Example 4:

Input: pattern = "abba", s = "dog dog dog dog"
Output: false

解題想法

每個pattern的字元,只能對應到一個字串,屬於一對一個關係。
ab不能同時對應dog
a也不能同時對應到dogcat
首先要先建立模式對應字串與字串對應模式的對照表。
若對照表中沒有相對應的值就加入表中,若有對應值,則比較目前取得的值是否跟對應值相等。

Solution

var wordPattern = function (pattern, str) {
  let matchPattern = {};
  let matchStr = {};
  let strArray = str.split(' ');
  let strLen = strArray.length;

  if (pattern.length !== strLen) {
    return false;
  }

  for (let i = 0; i < strLen; i++) {
    let p = pattern.charAt(i);
    let s = strArray[i];

    if (!matchPattern[p]) {
      matchPattern[p] = s;
    } else if (matchPattern[p] !== s) {
      return false;
    }

    if (!matchStr[s]) {
      matchStr[s] = p;
    } else if (matchStr[s] !== p) {
      return false;
    }
  };
  return true;
}

上一篇
LeetCode 283. Move Zeroes
下一篇
LeetCode 344. Reverse String
系列文
用LeetCode來訓練大腦的邏輯思維30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言